#!/bin/bash  
# 获取当前工作目录
CURRENT_DIR=$(pwd)
# 日志文件名
LOG_FILE_NAME="$(date +'%Y-%m-%d_%H-%M-%S')_logfile.log"
# 定义日志文件路径
LOG_FILE=${CURRENT_DIR}/${LOG_FILE_NAME}
# Dockerfile 路径（默认与脚本同目录，可自定义）
DOCKERFILE_PATH="${CURRENT_DIR}/sh2.Dockerfile" # 可修改为具体路径如 "./dockerfiles/app.Dockerfile"

# 创建日志文件
touch "$LOG_FILE"
echo "当前工作目录: $CURRENT_DIR" >> ${LOG_FILE}
echo "Dockerfile 路径: $DOCKERFILE_PATH" >> ${LOG_FILE}

# 检查是否以 root 运行
if [ "$(id -u)" != "0" ]; then
    echo "错误：此脚本必须以 root 用户身份运行" >> ${LOG_FILE}
    exit 1
fi

# 检查依赖工具
echo "------------------- 环境检测 -------------------" >> ${LOG_FILE}
which git >> ${LOG_FILE}
git --version >> ${LOG_FILE}
docker --version >> ${LOG_FILE}

# 检测 Docker 服务状态
docker_status=$(systemctl is-active docker)
if [ "$docker_status" = "active" ]; then
    echo "Docker 服务正在运行" >> ${LOG_FILE}
else
    echo "错误：Docker 服务未运行，请先启动 Docker" >> ${LOG_FILE}
    exit 1
fi

# ------------------- 容器操作 -------------------
CONTAINER_NAME="dei-admin-vue"  # 容器名称（需与 Dockerfile 中的服务名一致）
IMAGE_NAME="${CONTAINER_NAME}:tag"  # 镜像名称:标签

# 检查容器是否存在并停止删除
function manage_container {
    local container=$1
    local status=$(docker ps -aqf "name=${container}")
    
    if [ -n "$status" ]; then
        echo "------------------- 处理容器 $container -------------------" >> ${LOG_FILE}
        docker stop "$container" &> /dev/null
        docker rm "$container" &> /dev/null
        echo "容器 $container 已删除" >> ${LOG_FILE}
    else
        echo "容器 $container 不存在" >> ${LOG_FILE}
    fi
}

# 执行容器删除
manage_container "$CONTAINER_NAME"
manage_container "run_${CONTAINER_NAME}"  # 处理旧的运行容器

# ------------------- 镜像构建 -------------------
echo "------------------- 开始构建镜像 -------------------" >> ${LOG_FILE}
docker build \
    --no-cache \
    -f "$DOCKERFILE_PATH" \  # 指定 Dockerfile 路径
    -t "$IMAGE_NAME" \
    . \
    >> ${LOG_FILE} 2>&1  # 捕获标准错误到日志

if [ $? -ne 0 ]; then
    echo "错误：镜像构建失败，请检查 Dockerfile" >> ${LOG_FILE}
    exit 1
fi

echo "------------------- 镜像构建完成 -------------------" >> ${LOG_FILE}
docker image ls "$IMAGE_NAME" >> ${LOG_FILE}

# ------------------- 启动容器 -------------------
echo "------------------- 启动容器 -------------------" >> ${LOG_FILE}
docker run -itd \
    --name "run_${CONTAINER_NAME}" \
    -p 5201:5200 \
    "$IMAGE_NAME" >> ${LOG_FILE} 2>&1

if [ $? -eq 0 ]; then
    echo "容器启动成功：run_${CONTAINER_NAME}" >> ${LOG_FILE}
    docker ps -f "name=run_${CONTAINER_NAME}" >> ${LOG_FILE}
else
    echo "错误：容器启动失败" >> ${LOG_FILE}
    exit 1
fi

echo "------------------- 操作完成 -------------------" >> ${LOG_FILE}
echo "日志路径：${LOG_FILE}"